Jinx Debugger

Jinx is a concurrency debugger that deterministically controls the interleaving of workloads across processor cores, focusing on shared memory interactions. Using this deterministic approach, Jinx is able to increase the frequency of occurrence of elusive shared memory bugs, sometimes called Heisenbugs. Jinx works by dynamically building a set of potential interleavings (i.e. alternate eventualities, or execution scenarios, that will occur under some future condition) that are most likely to result in concurrency faults, and quickly tests those execution paths to surface concurrency problems such as deadlocks, race conditions and atomicity violations that are found in multiprocessing applications.

Unlike model checkers, Jinx does not require the specification of a model. Unlike dynamic and static code analysis methods, Jinx is notable in that it produces no false positives (spurious bug reports). This is because Jinx actually tests the scenarios that are likely to be bugs, as opposed to just inferring those scenarios by analyzing source code or observing the execution of a program.

Jinx is implemented as a hypervisor, giving it the ability to observe the effects of all elements of the software environment on thread interleaving. Jinx operates independently of any programming language or threading libraries or tools.

Jinx has been developed by Corensic[1] in Seattle, Washington based on research performed at the University of Washington[2] and initially presented at the ASPLOS conference of 2009.

References